什麼是多輪對話?
每次向大語言模型發送新消息時,不只是發送當前的問題,而是將整個歷史對話(包括之前的問題和回答)一起發送,這樣模型就可以記住先前的對話內容,根據上下文給出更連貫和相關回應。
執行步驟:
from openai import AzureOpenAI
from openai_config import *
client = AzureOpenAI(
azure_endpoint=azure_endpoint,
api_key=api_key,
api_version=api_version
)
# 保存使用者的聊天上下文
chat_history = [
{"role": "system", "content": "You are a helpful assistant."}
]
# 增加輸入到對話歷史
def update_chat_history(role, content):
chat_history.append({"role": role, "content": content})
# 聊天邏輯
def single_user_chat(user_input):
# 將使用者的輸入加到上下文中
update_chat_history("user", user_input.strip())
# 呼叫 Azure OpenAI 生成回應
response = client.chat.completions.create(
model=model_name, # 替換為 Azure 中的模型名稱,如 'gpt-35-turbo'
messages=chat_history, # 使用對話歷史
temperature=0, # 越高,回答越有創造性
max_tokens=150, # 控制回答長度
top_p=0.95, # 調整與控制AI模型輸出的隨機性,值越低時,模型輸出結果會更加的確定
frequency_penalty=0, # 調控進行推論時特定詞彙出現的頻率
presence_penalty=0, # 調控推論生成的內容中引入新概念或詞彙的傾向性
stop=None
)
# 取得 AI 回應
response_text = response.choices[0].message.content
# 將 AI 回應也加入上下文
update_chat_history("assistant", response_text)
return response_text
while True:
user_input = input("You:")
if user_input.lower() == "exit":
break
ai_response = single_user_chat(user_input)
print(f"AI:{ai_response}")
chat_history
:一個全局變數,用來存儲整個對話的上下文,包括所有的問題和回應,這裡初始化了 system
訊息,表示 AI 的角色是「幫助者」。update_chat_history
:這個函數會根據不同的角色(使用者或 AI)將消息添加到聊天歷史中。single_user_chat
:每次呼叫這個函數時,會將當前的對話上下文一同傳給 Azure OpenAI API,模型根據上下文生成回應。
AI 的回應包含對使用者之前提到的內容回應和總結,顯示 AI 有記住之前的對話,可以增強對話連貫性和回應。